#水平拼接图片

from PIL import Image
import glob
import os



def horizontal_concat_images(folder_path, output_path, sort_by_name=True):
    """
    将文件夹内所有图片水平拼接

    :param folder_path: 包含图片的文件夹路径
    :param output_path: 输出图片路径
    :param sort_by_name: 是否按文件名排序图片
    """
    # 获取文件夹中所有支持的图片文件
    image_files = []
    valid_extensions = ('.png', '.jpg', '.jpeg', '.bmp', '.gif', '.webp')

    for filename in os.listdir(folder_path):
        if filename.lower().endswith(valid_extensions):
            image_files.append(os.path.join(folder_path, filename))

    if not image_files:
        print(f"错误: 文件夹 {folder_path} 中没有找到图片文件!")
        return

    # 按文件名排序
    if sort_by_name:
        image_files.sort()

    # 打开所有图片并检查模式
    images = []
    for img_path in image_files:
        try:
            img = Image.open(img_path)
            # 转换为RGB模式，确保一致性
            if img.mode != 'RGB':
                img = img.convert('RGB')
            images.append(img)
        except Exception as e:
            print(f"警告: 无法打开图片 {img_path}, 错误: {e}")

    if not images:
        print("错误: 没有有效的图片可拼接!")
        return

    # 计算总宽度和最大高度
    widths, heights = zip(*(img.size for img in images))
    total_width = sum(widths)
    max_height = max(heights)

    # 创建新图片
    result = Image.new('RGB', (total_width, max_height))

    # 拼接图片
    x_offset = 0
    for img in images:
        result.paste(img, (x_offset, 0))
        x_offset += img.size[0]

    # 保存结果
    result.save(output_path)
    print(f"成功: 已将 {len(images)} 张图片水平拼接保存到 {output_path}")


if __name__ == '__main__':
     horizontal_concat_images(f'C:\\fenbei_monitor\\img\\','a.png')